package main

import "fmt"

// ListNode 定义链表节点
type ListNode struct {
	Val  int       //链表的数据域
	Next *ListNode //链表的指针域
}

func (ll *ListNode) Insert(val int) {
	if ll == nil {
		return
	}
	//创建一个新节点
	newNode := &ListNode{Val: val}
	cur := ll
	//找到链表的末尾节点
	for cur.Next != nil {
		cur = cur.Next //移动指针变量
	}
	//末尾节点的next指针域连接新节点
	cur.Next = newNode
}
func (ll *ListNode) Print() {
	if ll == nil {
		return
	}
	cur := ll
	for cur != nil {
		fmt.Print(cur.Val, "\t")
		cur = cur.Next //移动指针变量
	}
	fmt.Println()
}
func main() {
	head := &ListNode{Val: 1}
	head.Next = &ListNode{Val: 123}
	head.Next.Next = &ListNode{Val: 456}
	head.Next.Next.Next = &ListNode{Val: 789}

	tmp := head                    //指针变量赋值
	tmp = tmp.Next                 //移动指针变量
	tmp.Next = nil                 //通过tmp指针变量更改节点的指针域:截断链表（tmp为：地址引用。与head指向相同的地址，操作同一份数据）
	tmp.Next = &ListNode{Val: 100} // 通过tmp指针变量更改节点的指针域：增加节点
	head.Next.Next = nil           // 通过head指针变量操作链表的指针域：截断链表

	fmt.Println("*********************************************")
	root := &ListNode{Val: 10}
	root.Insert(20)
	root.Insert(30)
	root.Insert(40)
	root.Insert(50)
	root.Insert(60)
	fmt.Println("*********************************************")
	root.Print()

}
